export interface SoundOption {

    /**播放音量0-100 */
    volume?: number;

    /**循环次数 0为无限循环 默认1次 */
    loop?: number;

    /**优先级 数值越大优先级高 */
    priority?: number;

    /**开始播放时调用 */
    onStart?: () => void;

    /**淡入时长 */
    fadeIn?: number;

    /**淡出时长 */
    fadeOut?: number;

    /**播放起点 0~1*/
    start?: number;

    /**是否自动销毁*/
    autoDispose?: boolean;
}

export interface SoundTypeOption {

    /**音量0~100 */
    volume?: number;

    /**最大发声数 */
    max?: number;

    /**播放间隔(毫秒)*/
    interval?: number;

    /**达到最大发声数时是否可顶替  1可顶替 0 不可顶替 */
    replaceable?: boolean;

    /**被此列表的声音压制 */
    supresses?: SoundSupressOption[];
}

/**压制系数 */
export interface SoundSupressOption {

    /**声音类型 */
    type: number;

    /**开始压制时长 */
    attackTime: number;

    /**压制系数0~100 */
    ratio: number;

    /**释放压制时长 */
    releaseTime: number;
}

export enum SoundState {

    None = 0,

    /**准备中 */
    Ready = 1,

    /**播放中 */
    Play = 2,

    /**暂停中 */
    Pause = 3,

    /**停止中 */
    Stop = 4
}

export const defaultSoundOption: SoundOption = {
    volume: 100,
    loop: 1,
    priority: 10,
    fadeIn: 0,
    fadeOut: 0,
    start: 0
}

export const defaultSoundTypeOption: SoundTypeOption = {
    volume: 100,
    max: 1,
    interval: 200,
    replaceable: true
}


/**合并配置 */
export function getOption(opt: object, defaultOpt: object): SoundOption {
    let option = opt || {};

    for (let k in defaultOpt) {
        option[k] = option[k] || defaultOpt[k];
    }

    return option;
}



